package algorithm.middle;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;

public class AlertNames1604 {
    /**
     * 力扣公司的员工都使用员工卡来开办公室的门。每当一个员工使用一次他的员工卡，安保系统会记录下员工的名字和使用时间。如果一个员工在一小时时间内使用员工卡的次数大于等于三次，这个系统会自动发布一个 警告 。
     * <p>
     * 给你字符串数组 keyName 和 keyTime ，其中 [keyName[i], keyTime[i]] 对应一个人的名字和他在 某一天 内使用员工卡的时间。
     * <p>
     * 使用时间的格式是 24小时制 ，形如 "HH:MM" ，比方说 "23:51" 和 "09:49" 。
     * <p>
     * 请你返回去重后的收到系统警告的员工名字，将它们按 字典序升序 排序后返回。
     * <p>
     * 请注意 "10:00" - "11:00" 视为一个小时时间范围内，而 "23:51" - "00:10" 不被视为一小时内，因为系统记录的是某一天内的使用情况。
     *
     * @param keyName
     * @param keyTime
     * @return
     */

    public List<String> alertNames(String[] keyName, String[] keyTime) {
        if (keyName.length < 3) {
            return new ArrayList<>();
        }
        List<String> res = new ArrayList<>();
        Map<String, List<Integer>> map = new HashMap<>();
        for (int i = 0; i < keyName.length; i++) {
            map.computeIfAbsent(keyName[i], o -> new ArrayList<>()).add(Integer.parseInt(keyTime[i].replace(":", "")));
        }
        for (Map.Entry<String, List<Integer>> entry : map.entrySet()) {
            if (!fun(entry.getValue())) {
                res.add(entry.getKey());
            }
        }
        res.sort(String::compareTo);
        return res;
    }


    //计算列表内时间是否符合标准
    public boolean fun(List<Integer> list) {
        list.sort(Integer::compareTo);
        for (int i = 0; i + 2 < list.size(); i++) {
            if (list.get(i + 2) - list.get(i) <= 100) {
                return false;
            }
        }
        return true;
    }


    public static void main(String[] args) {
        String[] keyName = {"alice", "alice", "alice", "bob", "bob", "bob", "bob"};
        String[] keyTime = {"12:01", "12:00", "18:00", "21:00", "21:20", "21:30", "23:00"};

        System.out.println(new AlertNames1604().alertNames(keyName, keyTime));
    }
}
